/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.dao;

import br.com.deployment.daogenerico.DaoGenerico;
import br.com.deployment.entidade.fermojupi.AtoCampo;
import br.com.deployment.entidade.fermojupi.AtoItem;
import br.com.deployment.entity.selo.Ato;
import br.com.deployment.interfaces.AtoItemDaoIn;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author elyjr
 */
@Stateless
@LocalBean
public class AtoItemDao extends DaoGenerico<AtoItem> implements AtoItemDaoIn{
    
    public AtoItemDao(){
        super(AtoItem.class);
    }
    
    @Override
     public List<AtoItem> findAllOrderBy() {
        List<AtoItem> lista = new ArrayList<AtoItem>();
        String sql = "select a from AtoItem a order by a.codigo";
        Query query = getEm().createQuery(sql);
        lista = query.getResultList();
        return lista;
    }

   
    @Override
    public List<AtoItem> findAtoItem(String ato) {

        List<AtoItem> lst = new ArrayList<AtoItem>();
        String sql = "Select a from AtoItem a where";
        
        if(ato.length() <= 4){
            sql += " lower(a.sigla) like lower(:cod)";
        }else{
            sql += " lower(a.descricao) like lower(:cod)";
        }        

        Query query = getEm().createQuery(sql).setMaxResults(30);
        query.setParameter("cod", "%" + ato + "%");
        lst = query.getResultList();

        return lst;
    }

  
    @Override
    public AtoItem findCod(String cod) {
        String sql = "Select a from AtoItem a where a.codigo like :cod";
        Query query = getEm().createQuery(sql);
        query.setParameter("cod", "" + cod + "");        
        return (AtoItem) query.getSingleResult();
    }

    @Override
    public List<AtoItem> findStatus(AtoItem atoItem) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    
    @Override
    public List<AtoItem> findAtoItem(Ato ato) {
        List<AtoItem> list = new ArrayList<AtoItem>();
        if (ato != null) {
            String sql = "Select a from AtoItem a where a.ato.id = " + ato.getId();

            Query query = getEm().createQuery(sql);
            list = query.getResultList();
            System.out.println(sql);
        }

        return list;
    }

    
    @Override
    public List<AtoItem> pesquisaAto(AtoItem atoItem) {
         List<AtoItem> list = new ArrayList<AtoItem>();
       
             String sql = "select a from AtoItem a where ";
         
             if(atoItem.getDescricao()!= null && atoItem.getDescricao() != ""){
                 sql += "   lower(a.descricao) like lower(?1) and"; 
             }
              if(atoItem.getCodigo()!= null && atoItem.getCodigo() != ""){
                 sql += "   lower(a.codigo) like lower(?2) and"; 
             }
              
             sql += " 1=1 ";
             
             Query query = getEm().createQuery(sql);
             if(atoItem.getDescricao()!= null && atoItem.getDescricao() != ""){
                 query.setParameter("1", "%" + atoItem.getDescricao() + "%");
             }
             
             if(atoItem.getCodigo()!= null && atoItem.getCodigo() != ""){
                 query.setParameter("2", "%" + atoItem.getCodigo() + "%");
             }
        
        
              list = query.getResultList();
              System.out.println(sql);
     
        
        return list;
    
    }
    
    @Override
    public List<AtoCampo> findCampos(AtoItem atoItem){
        String sql = "";
        sql += "Select ac from AtoItem a JOIN a.atoCampos ac where";
        sql += " a.id = :atoItem and a.ativo = true";
        Query query = getEm().createQuery(sql);
        query.setParameter("atoItem", atoItem.getId());
        System.err.println("---"+query.getResultList());
        return query.getResultList();
    }
    
    
}
